package main.old.new_2023.last.month_7;


import java.util.*;

/**
 * @Description:
 * todo 2600. K 件物品的最大和
 * 袋子中装有一些物品，每个物品上都标记着数字 1 、0 或 -1 。
 * 给你四个非负整数 numOnes 、numZeros 、numNegOnes 和 k 。
 * 袋子最初包含：
 * numOnes 件标记为 1 的物品。
 * numZeroes 件标记为 0 的物品。
 * numNegOnes 件标记为 -1 的物品。
 * 现计划从这些物品中恰好选出 k 件物品。返回所有可行方案中，物品上所标记数字之和的最大值。
 *
 * todo 剑指 Offer 17. 打印从1到最大的n位数
 * 输入数字 n，按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3，则打印出 1、2、3 一直到最大的 3 位数 999。
 *
 * todo 剑指 Offer 61. 扑克牌中的顺子
 * 从若干副扑克牌中随机抽 5 张牌，判断是不是一个顺子，即这5张牌是不是连续的。
 * 2～10为数字本身，A为1，J为11，Q为12，K为13，而大、小王为 0 ，可以看成任意数字。A 不能视为 14。
 * @Author: Take-off
 * @Date: 1:00 PM 2023/6/5
 * @Param:
 * @return:
 **/
public class Solution0705 {

    //扑克牌中的顺子
    public boolean isStraight(int[] nums) {
        int max = 0;
        int min = 99;
       // 1。没有重复的牌（除了大小王）2。max-min <=5
        Set<Integer> set = new HashSet<>();
        for (int num:nums){
            if (num != 0){
                if (set.contains(num)){
                    return false;
                }else {
                    set.add(num);
                    if (max < num){
                        max = num;
                    }
                    if (min > num){
                        min = num;
                    }
                }
            }
        }
        if ((max -min) >5){
            return false;
        }else {
            return true;
        }
    }

    //打印从1到最大的n位数
    public int[] printNumbers(int n) {
        int max = 1;
        while (n > 0){
            max *= 10;
            n--;
        }
        if (max >1){
            int[] ints = new int[max];
            int temp = 0;
            for (int i =1;i<max;i++){
                ints[i-1] = i;
            }
            return ints;
        }
        return new int[0];
    }

    //K 件物品的最大和
    public int kItemsWithMaximumSum(int numOnes, int numZeros, int numNegOnes, int k) {
        int sum = 0;
        if (k > numOnes ){
            sum = numOnes;
            int temp = k - numOnes;
            if (temp > numZeros){
                temp = temp - numZeros;
                if (temp > numNegOnes){
                    sum -= numNegOnes;
                }else {
                    sum -= temp;
                }
            }
        }else {
            sum = k;
        }
        return sum;
    }
}
